package cn.iocoder.yudao.module.ad.plan.dal.dataobject;

import cn.iocoder.yudao.framework.business.basic.enums.SexEnum;
import cn.iocoder.yudao.framework.business.basic.pojo.po.MemberScopeEntity;
import cn.iocoder.yudao.framework.mybatis.core.type.StringListTypeHandler;
import cn.iocoder.yudao.module.api.ad.plan.enums.AdPlanBillingTypeEnum;
import cn.iocoder.yudao.module.api.ad.plan.enums.AdPlanExceptTypeEnum;
import cn.iocoder.yudao.module.api.ad.plan.enums.AdPlanStatusEnum;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalTime;
import java.util.List;

/**
 * 广告投放计划 DO
 *
 * @author 山野羡民（1032694760@qq.com）
 */
@TableName(value = "ad_plan", autoResultMap = true)
//@KeySequence("ad_plan_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
@NoArgsConstructor
public class AdPlanDO extends MemberScopeEntity {

    /**
     * 广告主，如个人姓名、公司名称
     */
    private String advertiser;

    /**
     * 封面地址
     */
    private String imageUrl;

    /**
     * 视频地址
     */
    private String videoUrl;

    /**
     * 落地页地址
     */
    private String landingUrl;

    /**
     * 预算金额，单位为分
     */
    private Integer budgetPrice;

    /**
     * 花费金额，单位为分
     */
    private Integer spendPrice;

    /**
     * 计费类型
     *
     * @see AdPlanBillingTypeEnum
     */
    private Integer billingType;

    /**
     * 计费单价，单位为分
     */
    private Integer billingUnitPrice;

    /**
     * 受众兴趣标签
     */
    @TableField(typeHandler = StringListTypeHandler.class)
    private List<String> targetingInterestTags;

    /**
     * 受众性别（0:不限，1:男性，2:女性）
     *
     * @see SexEnum
     */
    private Integer targetingGender;

    /**
     * 受众年龄最小值
     */
    private Integer targetingAgeMin;

    /**
     * 受众年龄最大值
     */
    private Integer targetingAgeMax;

    /**
     * 受众区县
     */
    private String targetingCountyCode;

    /**
     * 投放类型（0:固定时长，1:固定时段）
     *
     * @see  AdPlanExceptTypeEnum
     */
    private Integer exceptType;

    /**
     * 投放开始时间
     */
    private LocalTime exceptStartTime;

    /**
     * 投放结束时间
     */
    private LocalTime exceptEndTime;

    /**
     * 投放时长，单位为秒
     */
    private Integer exceptDuration;

    /**
     * 预期曝光次数
     */
    private Integer exceptExposureCount;

    /**
     * 实际曝光次数
     */
    private Integer actualExposureCount;

    /**
     * 预期播放次数
     */
    private Integer exceptPlayCount;

    /**
     * 实际播放次数
     */
    private Integer actualPlayCount;

    /**
     * 状态（0:待付款，10:待审核，20:进行中，30:已结束）
     *
     * @see AdPlanStatusEnum
     */
    private Integer status;

    /**
     * 排序
     */
    private Integer sort;

    /**
     * 备注
     */
    private String note;

}
